<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>forEach</title>
  <script>

    // Array.prototype.forEach(callback,[thisArg])
    const array = [1, 2, 3, 4, 5];
    // 使用forEach方法，改方法接收两个参数，第一个是一个函数，第二个是第一个参数的this值,是可选参数
    array.forEach(function (element, index, array) {
      // 第一个参数 element 是数组中的每一项
      // 第二个参数 index 是对应的索引
      // 第三个参数 array 是数组本身
      console.log(this); // window
    })

    array.forEach(function () {
      console.log(this); // [1, 2, 3, 4, 5]
    }, array)

    /** 
     * forEach方法返回值是undefined,也就是没有返回值
     * 不可链式调用,不会改变原数组
     */

    array.forEach(function (el, index, array) {
      return el * 2
    })

    console.log("array --->", array) // [1, 2, 3, 4, 5]

    /** 
     *  除了抛出异常以外，没有办法中止或跳出 forEach() 循环。
     *  如果你需要中止或跳出循环，forEach() 方法不是应当使用的工具。
     *  forEach里面不能使用 break continue 
     */

    array.forEach(function (el, index) {
      // 使用 return 并不能中止循环，只会跳过本次循环
      if (index === 2) return;
      console.log(index); // 0 1 3 4
    })

  </script>
</head>

<body>

</body>

</html>